package top.scsoul.voes.system.service;

import com.github.pagehelper.PageInfo;
import org.springframework.web.multipart.MultipartFile;
import top.scsoul.voes.common.core.domain.model.UserSearchVo;
import top.scsoul.voes.common.core.domain.model.UserVo;
import top.scsoul.voes.common.core.domain.entity.User;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * (User)表服务接口
 *
 * @author guolei
 * @since 2021-08-8 00:13:23
 */
public interface UserService {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    User queryById(Integer id);

    /**
     * 查询分页
     *
     * @param userSearchVo s
     * @param currentPage  s
     * @param pageSize     s
     * @return
     */
    PageInfo<User> queryAll(UserSearchVo userSearchVo, int currentPage, int pageSize);

    /**
     * 通过username查询单条数据
     *
     * @param username username
     * @return 实例对象
     */
    User queryByUsername(String username);

    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    List<User> queryAllByLimit(int offset, int limit);


    /**
     * 查询多条数据
     *
     * @param currentPage 当前页
     * @param pageSize    查询条数
     * @return 对象列表
     */
    PageInfo<User> selectPage(int currentPage, int pageSize);

    /**
     * 新增数据
     *
     * @param userVo 实例对象
     * @return 实例对象
     */
    User insert(UserVo userVo);

    /**
     * 修改数据
     *
     * @param userVo 实例对象
     * @return 实例对象
     */
    User update(UserVo userVo);

    User update(User user);

    /**
     * 修改密码
     *
     * @param username 用户名
     * @param password 密码
     * @return boolean
     */
    boolean resetPassword(String username, String password);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    boolean deleteById(Integer id);

    /**
     * 通过主键删除数据
     *
     * @param ids 主键
     * @return 是否成功
     */
    boolean deleteByIds(List<Integer> ids);

    void exportUser(List<Integer> ids, HttpServletResponse response) throws IOException;

    Map<String, Object> importUser(MultipartFile file) throws Exception;

    void getImportExcel(HttpServletResponse response) throws IOException;

    boolean selfResetPsw(String username,
                         String oldPassword,
                         String newPassword);
}